import type { AxiosRequestConfig } from 'axios'

/**
 * 扩展
 */
export interface RequestConfig extends AxiosRequestConfig {
  requestOptions?: RequestOptions
}

/**
 * 请求配置
 */
export interface RequestOptions {
  clearEmptyData?: boolean // 清除空参数
  closeLoad?: () => void // 关闭加载动画函数 在请求完成后执行
  fullPath?: boolean // 是否是完整路径 如果是完整路径 不会拼接baseURL
  globAlToast?: boolean // 是否全局提示语
  ignoreCancel?: boolean // 忽略取消请求
  isReturnNativeResponse?: boolean // 是否返回原生响应头 比如：需要获取响应头时使用该属性
  loadingFlag?: boolean // 是否开启加载动画的标志 默认是开启
  loadingMask?: boolean // 加载动画是否添加蒙版
  loadingText?: string // 加载文案
  needTimestamp?: boolean // 是否加时间戳
  openLoad?: () => void // 开启加载动画函数 在请求前执行
  // 重复请求配置
  retryRequest?: {
    count: number
    isOpenRetry: boolean
    waitTime: number
  }
}

/**
 * 上传文件参数
 */
export interface UploadFileParams {
  [key: string]: any
  // 其他参数
  data?: Record<string, any>
  // 文件
  file: Blob | File
  // 文件名称
  filename?: string
  // 文件参数接口字段名
  name?: string
}

/**
 * @description 请求头内容类型
 */
export enum ContentTypeEnum {
  // form-data  upload
  FORM_DATA = 'multipart/form-data;charset=UTF-8',
  // form-data qs
  FORM_URLENCODED = 'application/x-www-form-urlencoded;charset=UTF-8',
  // json
  JSON = 'application/json;charset=UTF-8'
}

/**
 * @description 请求的方法
 */
export enum RequestEnum {
  DELETE = 'DELETE',
  GET = 'GET',
  POST = 'POST',
  PUT = 'PUT'
}
